package com.哈希表;

import org.omg.CORBA.INTERNAL;

import java.util.*;

/**
 * 给定一个字符串，请你找出其中不含有重复字符的 最长子串 的长度。
 *
 * 示例 1:
 *
 * 输入: "abcabcbb"
 * 输出: 3
 * 解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
 */
public class 无重复字符的最长子串 {
    static class Solution {
        public int lengthOfLongestSubstring(String s) {
            if(s==null || s.length()==0){
                return 0;
            }
            if(s.length()==1){
                return 1;
            }
       Map<Character,Integer> map = new HashMap<>();
          List<Integer> list = new ArrayList<>();
       int sum = 0;

       int count = 0;
            for(int  i = 0;i<s.length();i++){
                if(map.containsKey(s.charAt(i))){
                    map.clear();
                    sum=0;
                    i  = count++;
                }
                else{
                    map.put(s.charAt(i),i);
                    ++sum;

                    list.add(sum);

                }
            }
            list.sort((t1,t2)->{
                return t2-t1;
            });

            return list.get(0);

        }

        /**
         * 1.人头开始遍历字符串
         * 2.如果遇到相同的字符就从第2个字符开始遍历，以此类推，遍历到最后一个。
         * @param s
         * @return
         */
        public int lengthOfLongestSubstring2(String s) {

            Map<Character,Integer> map = new HashMap<>();
            //计算子中的长度
            int sum = 0;
            //初始的长度
            int init = 0;
            //子串的起始位置
            int count = 0;
            for(int  i = 0;i<s.length();i++){
                if(map.containsKey(s.charAt(i))){
                    map.clear();
                    sum=0;
                    i  = count++;
                }
                else{
                    map.put(s.charAt(i),i);
                    ++sum;
                    if(sum>init){
                        init =sum;
                    }


                }
            }


            return init;
        }

        public static void main(String[] args) {
            Solution solution = new Solution();
            String s = "aab";
            System.out.println(solution.lengthOfLongestSubstring(s));
        }
    }
}
